module.exports = () => {
  const express = require('express')
  const router = express.Router()
  /**
 * @typedef hero
 * @property {integer} _id - 英雄_id 添加不用_id
 * @property {string} name.required - 英雄名称
 * @property {string} avatar - 头像地址
 * @property {string} banner - 英雄背景图片地址
 * @property {string} title - 英雄称号
 * @property {Array.<category>} categories - 所属分类
 * @property {scores.model} scores - 各项得分
 * @property {skills.model} skills - 技能信息
 * @property {Array.<item>} item1 - 顺风出装
 * @property {Array.<item>} item1 - 逆风出装
 * @property {string} usageTips - 使用技巧
 * @property {string} battleTips - 对抗技巧
 * @property {string} teamTips - 团战技巧
 * @property {Array.<partner>} partners - 建议搭档信息
 */
/**
 * @typedef scores
 * @property {integer} difficult - 英雄难度 -eg 0-10
 * @property {integer} skills - 技能得分 -eg 0-10
 * @property {integer} attack - 输出得分 -eg 0-10
 * @property {integer} survive - 生存能力 -eg 0-10
 */
/**
 * @typedef skills
 * @property {string} icon - 技能图标 
 * @property {string} name - 技能名称 
 * @property {string} delay - 技能冷却 
 * @property {string} cost - 技能消耗 
 * @property {string} description - 技能描述 
 * @property {string} tips - 技能建议 
 */
/**
 * @typedef partner
 * @property {hero.model} hero - 英雄信息 
 * @property {string} description - 配合技巧 
 */
  /**
  * This function comment is parsed by doctrine
  * @route POST /heroes
  * @group 英雄 - 增加英雄信息
  * @returns {model} 200 - 新增英雄信息
  * @returns {Error}  500 - 服务器出现错误
  */
  //增加    
  router.post('/', async (req, res) => {
    const model = await req.Model.create(req.body)
    res.send(model)
  })
  /**
  * This function comment is parsed by doctrine
  * @route GET /heroes
  * @group 英雄 - 查找所有英雄信息
  * @returns {model} 200 - 所有英雄信息
  * @returns {Error}  500 - 服务器出现错误
  */
  //查找所有
  router.get('/', async (req, res) => {
    let queryOptions = {}
    if (req.Model.modelName === 'Category') {
      queryOptions.populate = 'parent'
    }
    if (req.Model.modelName === 'Article') {
      queryOptions.populate = 'categories'
    }
    const items = await req.Model.find().setOptions(queryOptions)
    res.send(items)
  })
  /**
  * This function comment is parsed by doctrine
  * @route GET /heroes/:id
  * @group 英雄 - 查找某个英雄信息
  * @param {string} id.params.required - 英雄_id
  * @returns {model} 200 - 单个英雄信息
  * @returns {Error}  500 - 服务器出现错误
  */
  //查找
  router.get('/:id', async (req, res) => {
    const model = await req.Model.findById(req.params.id)
    res.send(model)
  })
  /**
  * This function comment is parsed by doctrine
  * @route PUT /heroes/:id
  * @group 英雄 - 编辑某个英雄信息
  * @param {string} id.params.required - 英雄_id
  * @returns {model} 200 - 单个英雄信息
  * @returns {Error}  500 - 服务器出现错误
  */
  //编辑
  router.put('/:id', async (req, res) => {
    const model = await req.Model.findByIdAndUpdate(req.params.id, req.body)
    res.send(model)
  })
  /**
  * This function comment is parsed by doctrine
  * @route DELETE /heroes/:id
  * @group 英雄 - 删除某个英雄信息
  * @param {string} id.params.required - 英雄_id
  * @returns {model} 200 - 是否成功
  * @returns {Error}  500 - 服务器出现错误
  */
  //删除
  router.delete('/:id', async (req, res) => {
    await req.Model.findByIdAndDelete(req.params.id)
    res.send({
      success: true
    })
  })
}